package com.xiaoh.nio;

import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;

/**
 * 说明
 *  1.MappedByteBuffer 可让文件直接在内存（堆外内存）修改，操作系统不需要拷贝一次
 *
 * @author xiaoH
 * @date 2020/5/4
 * @description
 */
public class MappedByteBufferTest {

    public static void main(String[] args) throws Exception{
        RandomAccessFile randomAccessFile = new RandomAccessFile("/Users/xiaoh/netty/file01.txt", "rw");
        //获取对应的通道
        FileChannel channel = randomAccessFile.getChannel();

        /**
         * FileChannel.MapMode.READ_WRITE：使用读写模式
         * 0：可以直接修改的起始位置
         * 5：是映射到内存的大小（不是索引位置），即将1.txt的多少字节映射到内存
         * 可以直接修改的范围是0-5
         */
        MappedByteBuffer mappedByteBuffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
        mappedByteBuffer.put(0, (byte)'H');
        mappedByteBuffer.put(3, (byte) '9');

        randomAccessFile.close();
        System.out.println("修改成功～");
    }
}
